package woaini.wind.service;

import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import woaini.wind.domain.MinIOConfig;
import woaini.wind.domain.MinIOContent;
import woaini.wind.service.dto.MinIOQueryCriteria;
import woaini.wind.utils.PageResult;

import java.util.List;

/**
 * @see IMinIOService
 * @author yefeng {@date 2024-11-04 14:40:52}
 */
public interface IMinIOService {

  /**
   * 获取配置
   * @author yefeng {@date 2024-11-04 14:41:39}
   * @since 1.0
   * @return {@link MinIOConfig }
   */
  MinIOConfig find();

  /**
   * 修改配置
   * @param config 配置
   * @author yefeng {@date 2024-11-04 14:41:41}
   * @since 1.0
   * @return {@link MinIOConfig }
   */
  MinIOConfig config(MinIOConfig config);


  /**
   * 分页查询
   * @param criteria 条件
   * @param pageable 分页参数
   * @author yefeng
   * {@date 2024-11-04 14:46:12}
   * @since 1.0
   * @return {@link PageResult }<{@link MinIOContent }>
   */
  PageResult<MinIOContent> queryAll(MinIOQueryCriteria criteria, Pageable pageable);

  /**
   * 查询全部
   * @param criteria 条件
   * @author yefeng {@date 2024-11-04 14:49:35}
   * @since 1.0
   * @return {@link List }<{@link MinIOContent }>
   */
  List<MinIOContent> queryAll(MinIOQueryCriteria criteria);

  /**
   * @param file 文件
   * @param config 配置
   * @author yefeng {@date 2024-11-04 14:50:12}
   * @since 1.0
   * @return {@link List }<{@link MinIOContent }>
   */
  MinIOContent upload(MultipartFile file, MinIOConfig config);

  /**
   * 根据id查询文件
   * @param id ID
   * @author yefeng {@date 2024-11-04 14:51:07}
   * @since 1.0
   * @return {@link MinIOContent }
   */
  MinIOContent findByContentId(Long id);

  /**
   * 下载文件
   * @param content 内容
   * @param config 配置
   * @author yefeng
   * {@date 2024-11-04 14:53:19}
   * @since 1.0
   * @return {@link String }
   */
  String download(MinIOContent content, MinIOConfig config);

  /**
   * 删除文件
   * @param content 内容
   * @param config 配置
   * @author yefeng {@date 2024-11-04 14:53:53}
   * @since 1.0
   */
  void delete(MinIOContent content, MinIOConfig config);

  /**
   * 数据同步
   * @param config 配置
   * @author yefeng {@date 2024-11-04 14:54:43}
   * @since 1.0
   */
  void synchronize(MinIOConfig config);

  /**
   * 删除文件
   * @param ids id列表
   * @param config 配置
   * @author yefeng {@date 2024-11-04 14:55:38}
   * @since 1.0
   */
  void deleteAll(Long[] ids, MinIOConfig config);
}
